css3 - Chrome CSS bug: "translate3d" inside a rotated element does not obey "overflow: hidden" -


take @ codepen see mean:

.perspective-container {    margin: 50px 0;    perspective: 1000px;    perspective-origin: 0 50%;  }  .card {    border: 10px solid blue;    width: 300px;    height: 300px;    overflow: hidden;    transform: rotatey(-45deg);  }  .card-inner {    width: 300px;    height: 300px;    overflow: hidden;  }  .scroller {    transform: translate(0, -100px);  }  .scroller-3d {    transform: translate3d(0, -100px, 0);  }  .will-change {    will-change: transform;  }
<h1>incorrect (uses will-change):</h1>  <div class="perspective-container">    <div class="card"><div class="card-inner">      <div class="scroll-container">        <div class="scroller will-change">          <img src="https://images2.pixlis.com/background-image-horizontal-lines-and-stripes-seamless-tileable-grey-black-22hnju.png" />        </div>      </div>    </div></div>  </div>  <h1>incorrect (uses translate3d):</h1>  <div class="perspective-container">    <div class="card">      <div class="scroll-container">        <div class="scroller-3d">          <img src="https://images2.pixlis.com/background-image-horizontal-lines-and-stripes-seamless-tileable-grey-black-22hnju.png" />        </div>      </div>    </div>  </div>  <h1>correct (uses neither translate3d or will-change):</h1>  <div class="perspective-container">    <div class="card">      <div class="scroll-container">        <div class="scroller">          <img src="https://images2.pixlis.com/background-image-horizontal-lines-and-stripes-seamless-tileable-grey-black-22hnju.png" />        </div>      </div>    </div>  </div>

i have rotated element perspective applied, inside of have 'scrolling' div transformed vertically (imagine magazine page-turn experience scrolling divs inside each page). added will-change: transform inner div , broke outer container overflow: hidden. seems bug chrome compositor.

does know of workarounds? keep will-change attribute because speeds-up animations on mobile chrome.

edit: looks not specific will-change property property makes inner div own compositing layer. when remove will-change property change transform translate3d improves performance , exhibits bug. class on inner div allows rotated parent correctly render overflow: hidden 1 adds 2d transform.

try codepen:

.container {    margin: 75px 0;  }    .card {    border: 10px solid blue;    width: 300px;    height: 300px;    overflow: hidden;    -webkit-transform: perspective(1000px) rotatey(-45deg);    transform: perspective(1000px) rotatey(-45deg);    -webkit-transform-origin: 0 50%;    transform-origin: 0 50%;  }    .scroller {    -webkit-transform: translate(0, -100px);    transform: translate(0, -100px);  }    .scroller-3d {    -webkit-transform: translate3d(0, -100px, 0);    transform: translate3d(0, -100px, 0);  }    .will-change {    will-change: transform;  }
<h1>uses will-change:</h1>  <div class="container">    <div class="card">      <div class="scroll-container">        <div class="scroller will-change">          <img src="https://images2.pixlis.com/background-image-horizontal-lines-and-stripes-seamless-tileable-grey-black-22hnju.png" />        </div>      </div>    </div>  </div>    <h1>uses translate3d:</h1>  <div class="container">    <div class="card">      <div class="scroll-container">        <div class="scroller-3d">          <img src="https://images2.pixlis.com/background-image-horizontal-lines-and-stripes-seamless-tileable-grey-black-22hnju.png" />        </div>      </div>    </div>  </div>    <h1>uses neither translate3d or will-change:</h1>  <div class="container">    <div class="card">      <div class="scroll-container">        <div class="scroller">          <img src="https://images2.pixlis.com/background-image-horizontal-lines-and-stripes-seamless-tileable-grey-black-22hnju.png" />        </div>      </div>    </div>  </div>

you play perspective() , transform-origin values.