Значение preserve-3d
должно быть установлено для родительского элемента.
В вашем случае, я полагаю, вы хотите расположить элемент <span>
с прорезями относительно <div id="inner-wrapper">
, поэтому вам нужно применить preserve-3d
к <div>
.
См. пример ниже:
btn.onclick = () => {
customElements.define( 'custom-element', class extends HTMLElement {
constructor() {
super()
this.attachShadow( {mode: 'open' } )
.innerHTML = `
<style>
#some-inner-wrapper {
display: inline-block ;
padding: 10px ;
background-color: rgb(255,0,0,0.5) ;
transition: transform 1s ;
transform-style: preserve-3d ;
}
#some-inner-wrapper:hover {
transform: rotateY(55deg) ;
}
</style>
<div id="some-inner-wrapper">
Horizontal <slot name="some-slot"></slot> Rotation
</div>
`
}
} ), btn.disabled=true
}
span {
display: inline-block ;
transition: transform 1s ;
padding: 20px ;
border: 1px solid black ;
background-color: yellow ;
cursor: pointer ;
}
span:hover {
transform: rotateX(40deg) ;
}
<custom-element>
<span slot="some-slot">Vertical Rotation</span>
</custom-element>
<div>
<button id="btn">Upgrade</button>
Конечно, если вы применяете правила преобразования к самому пользовательскому элементу, он также может работать (потому что это тоже родитель).
Код выше был вдохновлен W3schools пример .