Я использую transform: rotateX(60deg) rotateY(0deg) rotateZ(-45deg);
, чтобы элемент выглядел в изометрической перспективе. Мне интересно, как я могу отменить эффект для некоторых детей, чтобы они имели общую систему координации, но нормально выровнены. Я попытался повернуть детей таким же образом назад, но, похоже, это работает по-другому. Есть идеи?
.iso {
transform: rotateX(60deg) rotateY(0deg) rotateZ(-45deg);
transform-style: preserve-3d;
position: relative;
height: 20rem;
width: 20rem;
text-align: center;
margin: 0 auto;
background-color: tomato;
box-sizing: border-box;
padding: 2rem;
}
.marker {
position: absolute;
left: 10rem;
top: 15rem;
transform: rotateX(-60deg) rotateY(0deg) rotateZ(45deg);
}
<div class = "iso">
<h3>I'm also iso aligned</h3>
<div class = "marker">
<svg xmlns='http://www.w3.org/2000/svg' height='30' width='27' viewBox='0 0 25 30'><path stroke = "#FFFFFF" stroke-width = "2" fill='29434e' d='M13.6363636,0.272727273 C16.6363636,0.272727273 19.6363636,1.63636364 21.8181818,3.81818182 C24,6.27272727 25.3636364,9 25.3636364,12.2727273 C25.3636364,15.5454545 24,19.0909091 21.8181818,21.2727273 L13.6363636,29.7272727 L5.45454545,21.2727273 C3.27272727,19.0909091 1.90909091,15.8181818 1.90909091,12.2727273 C1.90909091,9 3,6.27272727 5.45454545,3.81818182 C7.63636364,1.63636364 10.6363636,0.272727273 13.6363636,0.272727273 Z'/></svg></div>
</div>
Вы должны изменить transform-origin
, чтобы сделать его внизу, а затем использовать противоположное преобразование, как показано ниже. Вы должны не только инвертировать значения, но и порядок.
Добавлен дополнительный нетрансформированный производитель для сравнения
.iso {
transform: rotateX(60deg) rotateY(0deg) rotateZ(-45deg);
transform-style: preserve-3d;
position: relative;
height: 20rem;
width: 20rem;
text-align: center;
margin: 0 auto;
background-color: tomato;
box-sizing: border-box;
padding: 2rem;
}
.marker {
position: absolute;
left: 10rem;
top: 15rem;
transform: rotateZ(45deg) rotateY(0deg) rotateX(-60deg);
transform-origin:bottom center;
}
.compare {
position:absolute;
left: 15rem;
top: 10rem;
}
<div class = "iso">
<h3>I'm also iso aligned</h3>
<div class = "marker">
<svg xmlns='http://www.w3.org/2000/svg' height='30' width='27' viewBox='0 0 25 30'><path stroke = "#FFFFFF" stroke-width = "2" fill='29434e' d='M13.6363636,0.272727273 C16.6363636,0.272727273 19.6363636,1.63636364 21.8181818,3.81818182 C24,6.27272727 25.3636364,9 25.3636364,12.2727273 C25.3636364,15.5454545 24,19.0909091 21.8181818,21.2727273 L13.6363636,29.7272727 L5.45454545,21.2727273 C3.27272727,19.0909091 1.90909091,15.8181818 1.90909091,12.2727273 C1.90909091,9 3,6.27272727 5.45454545,3.81818182 C7.63636364,1.63636364 10.6363636,0.272727273 13.6363636,0.272727273 Z'/></svg></div>
</div>
<!-- to compare with -->
<svg class = "compare" xmlns='http://www.w3.org/2000/svg' height='30' width='27' viewBox='0 0 25 30'><path stroke = "#FFFFFF" stroke-width = "2" fill='29434e' d='M13.6363636,0.272727273 C16.6363636,0.272727273 19.6363636,1.63636364 21.8181818,3.81818182 C24,6.27272727 25.3636364,9 25.3636364,12.2727273 C25.3636364,15.5454545 24,19.0909091 21.8181818,21.2727273 L13.6363636,29.7272727 L5.45454545,21.2727273 C3.27272727,19.0909091 1.90909091,15.8181818 1.90909091,12.2727273 C1.90909091,9 3,6.27272727 5.45454545,3.81818182 C7.63636364,1.63636364 10.6363636,0.272727273 13.6363636,0.272727273 Z'/></svg>
Связанные вопросы, чтобы лучше понять важность порядка:
Симуляция преобразования-происхождения с использованием перевода
Обратите внимание на этот пример codepen.io/Поли-Д/пен/YzpXBQO. Здесь дочерний объект не сбрасывается правильно после обратного вращения. (сравните форму с обратным вращением и отсутствие вращения в родительском и дочернем состоянии)