bottom
sets the distance of the element's bottom border to its offset parent.
To do what you want, you need to use top
:
#circle {
position: absolute;
top: 100%;
}
Demo
I wrote a little demo to visualize this, run this code snippet:
<style>body{display:flex;align-items:flex-end}div{color:#693;border:solid 1px}#clip{padding-top:30px;overflow:hidden;position:relative}#outer{width:80px;height:100px;position:relative}#inner{width:15px;height:15px;position:absolute;bottom:10%;left:30px;background:currentColor}#inner:after{content:'';position:absolute;height:250px;left:50%;border-left:dashed 1px}input{writing-mode:bt-lr;-webkit-appearance:slider-vertical}</style><section> <label for="distance">bottom:</label> <output id="distanceout">10%</output><br><input type="range" min="0" max="120" value="10" step="10" id="distance" orient="vertical"></section><section id="clip"><div id="outer"><div id="inner"></div></div></section><script>distance.oninput=()=>{const percent=distance.value + '%'; distanceout.textContent=inner.style.bottom=distance.value + '%';}</script>