0

I'm trying to implement zooming using transform: scale(). The structure looks something like that:

<div class="nodes">
    <div class="main-wrapper">
       <-- svg lines are here -->
    </div>
</div>

Where nodes has position set to relative.

The problem is when I apply transform: scale() to main-wrapper, the offsetParent of svg lines drawn inside of main-wrapper changes to main-wrapper instead of nodes. I need it to be relative to nodes in order to draw it correctly.

How can I force it to be always relative to nodes?

I tried setting main-wrapper's position to static after transform but it did not help.

//Edit

Here's a simplified example

.main-wrapper {
  display: flex;
  align-items: center;
  transition: transform .5s;
  transform-origin: 0 0;
  transform: scale(1);
  background: green;
  width: 100px;
  height: 100px;
}

.empty {
  background: blue;
  height: 60px;
  width: 100%;
}

.nodes {
  position: relative;
  width: 200px;
  height: 200px;
  background: yellow;
}

svg{
  position:absolute;
 top:25px;
}

.main-wrapper-no-trans {
  display: flex;
  align-items: center;
  background: green;
  width: 100px;
  height: 100px;
}

.nodes-no-trans {
  position: relative;
  width: 200px;
  height: 200px;
  background: yellow;
}
<div class="nodes-no-trans">
  <div class="empty"></div>
 <div class="main-wrapper-no-trans">
      <svg> 
       <line x1="0" y1="0" x2="100" y2="0/" stroke="red" stroke-width="4"></line> 
      </svg>
   </div>
</div>

<br><br><br>

<div class="nodes">
  <div class="empty"></div>
 <div class="main-wrapper">
      <svg> 
       <line x1="0" y1="0" x2="100" y2="0/" stroke="red" stroke-width="4"></line> 
      </svg>
   </div>
</div>
Manekin
  • 19
  • 3

0 Answers0