Есть довольно аккуратный хак, который вы можете сделать для кругов (или идеальных квадратов). В псевдоклассе :after
вы можете сказать padding-bottom: 100% - этот процент относится к самому .circle
, поэтому ширина и высота в точности совпадают. В сочетании с процентом от ширины круга вы можете изменить их размер с помощью контейнера.
Вы заметите, что изменение размера контейнера сохраняет размер круга относительно родительского элемента и положение относительнородитель также.
.header {
position: relative;
height: 300px;
background: grey;
}
.circle {
width: 10%;
position: absolute;
}
.circle::after {
content: '';
display: block;
padding-bottom: 100%;
border: 1px solid green;
border-radius: 100%;
overflow: hidden;
}
.circle.top-left {
left: 10%;
top: 10%;
}
.circle.bottom-right {
right: 10%;
bottom: 10%;
}
<div class="header">
<div class="circle top-left"></div>
<div class="circle bottom-right"></div>
</div>