Круг с исчезающими краями снизу
Я пытаюсь сделать это изображение с помощью css (или svg). Для меня самая сложная часть - это полудуга на левой и правой стороне круга. Следует ли мне придерживаться чистого CSS или лучше использовать изображения?
Вот что мне удалось сделать:
Мой код
body {
background-color: #002911 !important;
}
h3 {
color: #ffd004;
}
#actions-container {
margin-top: 30px;
}
#actions-container .action-icon {
width: 200px;
height: 200px;
background-color: rgb(255, 208, 4);
border-radius: 50%;
box-shadow: 5px -2px 6px 3px #0000004a;
/* center contents*/
display: flex;
justify-content: center;
align-items: center;
}
.right-arc {
position: relative;
display: inline-block;
font-size: 30px;
color: lightgreen;
margin: 40px;
}
.right-arc::after {
content: '';
position: absolute;
right: -150px;
top: 57px;
height: 300px;
width: 300px;
border-radius: 50% 50% 50% 50%;
border-width: 0px 1px 0px 0px;
border-style: solid;
/*border-top: outset;*/
}
/*svg {
width: 33%;
height: auto;
}*/
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" />
<div class="container" id="actions-container">
<div class="d-flex justify-content-between">
<div class="action-icon-box text-center ">
<div class="right-arc">
</div>
<h3 class="text-center">Title</h3>
<div class="p-1 action-icon text-center mt-4">
<a href="#"><img class="center" src="/Content/images/lp-homepage/microphone.png" height="100" /></a>
</div>
</div>
</div>
</div>
Свободный перевод вопроса Circle with fading borders on the bottom от участника @TheMah.
Ответы (3 шт):
Вы можете использовать псевдоэлемент с inset box-shadow, чтобы создать исчезающую границу внизу, как эта:
body {
background: #232323;
}
.wrap {
box-sizing: border-box;
position: relative;
width: 50%;
border: 3px solid #ffd004;
border-radius: 50%;
}
.wrap::before {
content:'';
display:block;
padding-bottom:100%;
}
.wrap::after {
content: '';
position: absolute;
bottom: -3px;
left: -3px;
right: -3px;
height: 100%;
z-index: 1;
box-shadow: inset 0px -270px 70px -100px #232323;
}
.title {
color: #ffd004;
margin: 0;
position: absolute;
top: -3px;
left: 0;
width: 100%;
text-align: center;
z-index: 2;
background: #232323;
}
.circle {
position: absolute;
top:15%;
left:15%;
width: 70%;
height: 70%;
border-radius: 50%;
background: #ffd004;
z-index: 2;
}
<div class="wrap">
<h2 class="title">Title</h2>
<div class="circle"></div>
</div>
Имейте в виду, что это будет работать только на однотонном фоне. Если вам нужно отобразить это поверх градиента или изображения, я настоятельно рекомендую использовать SVG.
Для однотонного фона код можно сократить, если использовать конический и радиальный градиенты (Внимание! Пока не поддерживается в Firefox):
/* Only for demo */ document.querySelector('div.controls').addEventListener('input',function(ev){let v=ev.target.dataset.var;switch(v){case "cb":case "cl":case "cc":case "ct":document.body.style.setProperty(`--${v}`,`hsl(${ev.target.value}deg 100% 50%)`);break;case "tl":document.body.style.setProperty(`--${v}`,`${75 - ev.target.value}%`);break;case "dc":document.body.style.setProperty(`--${v}`,`${ev.target.value}%`);break;case "tx":document.body.style.setProperty(`--${v}`,`'${ev.target.value}'`);break}})
/* Only for demo */ body{--cb:hsl(260deg 100% 50%);--cl:hsl(50deg 100% 51%);--cc:hsl(50deg 100% 51%);--ct:hsl(50deg 100% 51%);--tl:66%;--dc:60%;--tx:'Title';height:100vh;margin:0;display:flex;justify-content:space-around;align-items:center;background-color:var(--cb)}.controls{display:flex;flex-flow:column wrap;align-items:center;height:149px;width:270px;text-transform:uppercase;text-shadow:-1px -1px 1px #fff,1px -1px 1px #fff,1px 1px 1px #fff,-1px 1px 1px #fff;font:bold 11px/1em Arial}.text,.thick,.color{appearance:none;margin-bottom:.7em;border-radius:1em;outline:none;box-shadow:inset 1px 3px 4px -1px #000}.text{width:46%;margin-top:.7em;padding:2px;border:none;font:bold 11px Arial;text-align:center}.thick{background-image:linear-gradient(to right bottom,#fff calc(50% - 1px),#000 calc(50% + 1px))}.color{background-image:linear-gradient(to right,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00)}.thick::-webkit-slider-thumb,.color::-webkit-slider-thumb{border-radius:1em;box-shadow:inset 0 0 1px 2px #000,inset -1px -3px 4px 0 #000,inset 0 0 0 10px #fff}
.circle {
position: relative;
height: 160px;
width: 160px;
border-radius: 50%;
background-image:
radial-gradient(
circle,
var(--cc, #ffd505) calc(var(--dc, 60%) - 1px),
var(--cb, #5500ff) var(--dc, 60%),
var(--cb, #5500ff) calc(var(--tl, 66%) - 1px),
transparent var(--tl, 66%)),
conic-gradient(
transparent 30deg,
var(--cl, #ffd505) 31deg,
transparent 140deg,
transparent 220deg,
var(--cl, #ffd505) 329deg,
transparent 330deg);
}
.circle::after {
content: var(--tx, 'Title');
position: absolute;
top: -.5em;
left: 0;
z-index: 1;
width: 100%;
margin: 0;
font: bold 32px/1em serif;
text-align: center;
color: var(--ct, #ffd505);
background-color: var(--cb, #5500ff);
}
<!-- Only for demo --> <div class="controls">цвет фона<input type="range" class="color" data-var="cb" max="360" value="260"> цвет линий<input type="range" class="color" data-var="cl" max="360" value="50"> цвет круга<input type="range" class="color" data-var="cc" max="360" value="50"><span class="text">текст</span>цвет текста<input type="range" class="color" data-var="ct" max="360" value="50"> толщина линий<input type="range" class="thick" data-var="tl" max="75" value="9"> диаметр круга<input type="range" class="thick" data-var="dc" max="75" value="50"><input type="text" class="text" data-var="tx" maxlength="10" value="Title"></div>
<div class="circle"></div>
В реальном проекте все css-переменные можно заменить статическими значениями. Все необязательные строки предваряются соответствующим комментарием, служат только для наглядности и могут быть удалены.
На CSS, при условии, что фон будет одного цвета.
body {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
min-height: 100vh;
background: #666;
margin: 0;
}
.circle {
display: block;
width: 200px;
height: 200px;
border-radius: 50%;
background: #666 linear-gradient(to bottom,
transparent 5%,
rgba(255,255,0,1) 5%,
rgba(255,255,0,1) 25%,
rgba(255,255,0,0)
);
padding: 3px;
position: relative;
box-sizing: border-box;
}
.circle .wrap {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background: #666;
width: 100%;
height: 100%;
border-radius: 50%;
}
.circle .title {
display: block;
width: 100%;
color: yellow;
font-weight: bold;
font-size: 150%;
text-align: center;
position: absolute;
top: 0;
transform: translateY(-25%);
}
.circle .icon {
display: flex;
justify-content: center;
align-items: center;
width: 150px;
height: 150px;
border-radius: 50%;
background: yellow;
}
.circle .icon img {
display: block;
width: 50%;
height: 50%;
object-fit: contain;
}
<div class="circle">
<div class="wrap">
<div class="title">Title</div>
<div class="icon">
<img src="//i.imgur.com/TR3rp8j.png">
</div>
</div>
</div>
В противном случае, советую использовать SVG

