const parent = document.querySelector("#parent"),
handle = parent.querySelector("#handle")
let startX,
startWidth
handle.addEventListener("mousedown", e => {
startX = e.clientX
startWidth = parseInt(document.defaultView.getComputedStyle(parent).width, 10)
document.documentElement.addEventListener("mousemove", resize, false)
document.documentElement.addEventListener("mouseup", stopResize, false)
})
function resize(e) {
parent.style.width = (startWidth + e.clientX - startX) + "px"
}
function stopResize() {
document.documentElement.removeEventListener("mousemove", resize, false)
document.documentElement.removeEventListener("mouseup", stopResize, false)
}
#parent {
border-color: red;
border-width: 1px;
border-style: solid;
height: 200px;
max-height: 150px;
overflow: scroll;
width: 300px;
padding-right: 20px;
position:relative;
}
#handle {
position: absolute;
top: 0;
right: -5px;
width: 10px;
height: 100%;
cursor: ew-resize;
}
<div id="parent">
<div>
<h1>My First CSS Example</h1>
<p>This is a paragraph.</p>
<p>This is a paragraph.</p>
</div>
<div id="handle"> </div>
</div>