I am having a little bit of trouble with my CSS, as when I change the default zoom (Command + on Mac) of the browser it causes the below image.
When it is at 100% viewport on chrome, it is supposed to look like the below where it fits perfectly in the black box.
My html code is below. For the sake of simplicity, I have only included the container and the tag to show where I wrote it.
<body> <div class="container"> <div class="container-bars"></div> </div> </body>
My CSS code is below:
body { background-color: rgb(89, 87, 87); margin-right: auto; margin-left: auto; .container { background-color: rgb(37, 35, 35); height: 80%; position: absolute; width: 60%; left: 500px; top: 150px; } .bars { float: left; border: 1px solid rgb(232, 10, 10); background-color: rgb(218, 215, 215); }
The .container is the black box in the background and the body is the grey background. Finally, .bars just represents the CSS for each bar. I am creating a visualizer so the when adding the bars, I am using javascript. The code for adding the bars is below.
const container = document.querySelector('.container'); function add_bars(input) { const Div = document.createElement('div'); const containerWidth = container.clientWidth; const containerHeight = container.clientHeight; const barWidth = containerWidth / inputval - 2; Div.className = 'bars'; //prettier-ignore Div.style.height = `${((containerHeight / 100) * input) - 2}px`; Div.style.width = `${barWidth}px`; containerBars.append(Div); }
The input in this case is how large the size of the array is which I am dividing in order to split the width of each bar equally. Any help would be appreciated as to why it exceeds the container when I change how “zoomed” in the browser is. Thanks!
function for_loop(array) { resetArray(); for (let i = 0; i < array.length; i++) { add_bars(array[i]); } }
Advertisement
Answer
When you use %
or vh
vw
in css and change zoom the elements will change their sizes. Try a console.log(document.querySelector(“.container”)) after and before changing zoom and you will see a different value. In order to avoid that behavior you have to use fixed sizes in your elements. For example:
.container { background-color: rgb(37, 35, 35); position: absolute; height: 600px; // pixels, not % or vh width: 800px;// the same left: 150px; top: 150px; }
Also, when you make zoom out the problem persist. In order to avoid that just add the next:
* { box-sizing: border-box; }
And there is no need to substract 2 px in add_bars function:
... const barWidth = containerWidth / inputval; ... Div.style.height = `${((containerHeight / 100) * input)}px`; ...