Skip to content
Advertisement

CSS display changes after changing zoom

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. enter image description here

When it is at 100% viewport on chrome, it is supposed to look like the below where it fits perfectly in the black box. enter image description here

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`;
...
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement