I'm trying to make a planet with rings like this photo

I am currently doing this in what seems very dirty. A ring (ellipse) is a div with a background, and the black frame is rotated, and I achieve the effect of the ring going behind the planet by adding another half of the red circle on top.
Here is the JSFiddle , and below is a snippet demonstration.
.elipse {
width: 300px;
height: 105px;
background: none;
border-radius: 50%;
-ms-transform: rotate(40deg);
-webkit-transform: rotate(40deg);
transform: rotate(40deg);
position: absolute;
left: 45px;
top: 45px;
border: 5px solid black;
}
.full-planet {
height: 170px;
width: 170px;
border-radius: 170px 170px 170px 170px;
-moz-border-radius: 170px 170px 170px 170px;
-webkit-border-radius: 170px 170px 170px 170px;
position: absolute;
left: 120px;
top: 20px;
background: red;
}
.half-planet {
height: 85px;
width: 170px;
border-radius: 170px 170px 0 0;
-moz-border-radius: 170px 170px 0 0;
-webkit-border-radius: 170px 170px 0 0;
-ms-transform: rotate(40deg);
-webkit-transform: rotate(40deg);
transform: rotate(40deg);
position: absolute;
left: 147px;
top: 30px;
background: red;
}
.cont {
padding-left: 100px;
padding-top: 100px;
position: relative;
width: 0;
height: 0;
}
<div class='container'>
<div class="full-planet"></div>
<div class='elipse'></div>
<div class="half-planet"></div>
</div>
Run codeHide resultIt is very difficult to adjust the parameters to get a good alignment. For example, if I need to change one parameter, I have to change almost all the others in order to maintain alignment. Is there a way to do this so that I don’t need to constantly adjust the parameters based on my vision? I feel that there is a cleaner way to do this.