Чтобы лучше контролировать вращение и легче выравнивать его по левому краю и центрировать его по вертикали, используйте оба параметра transform-origin
и transform
.
Сначаласделайте его левый / верхний угол центром вращения, добавив transform-origin: left top;
к div
.
Во-вторых, скомбинировав rotate
и translate
, переместите его на половину своей ширины квлево (translateX(-50%)
), а затем поверните его на 90 градусов против часовой стрелки rotate(-90.0deg)
.
Примечание 1;При использовании более одного значения <transform-function>
они выполняются справа налево, что в приведенном ниже примере означает, что оно начинается с translateX
.
Примечание 2;Я временно удалил префиксные свойства, поэтому вам нужно добавить их обратно.
Фрагмент стека
html,
body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
font-size: 16px;
font-family: Arial, sans-serif;
background-color: #ccc;
}
* {
box-sizing: border-box;
}
body>div {
position: fixed;
top: 50%;
left: 0;
background-color: #FF0000;
color: white;
font-weight: bold;
padding: 10px;
transform-origin: left top;
transform: rotate(-90.0deg) translateX(-50%);
}
<div>Lorem Ipsum</div>
Обновление после комментария.
Вот 4 скрипты, показывающие 4 шага, которые, надеюсь, сделают его более понятнымкак это работает:
Шаг 1 - Шаг 2 - Шаг 3 - Шаг 4
Вот анимация, показывающая, как она движется, и, надеюсь, прояснить, как это работает:
html, body {
margin: 0;
font-size: 16px;
font-family: Arial, sans-serif;
}
.faked-body div {
position: absolute;
top: 50%;
left: 0;
background-color: #FF0000;
color: white;
font-weight: bold;
padding: 10px;
transform-origin: left top; /* the rotation center is moved to black circle */
transform: rotate(0)
translateX(0);
animation: the-div 3s 1s forwards;
}
@keyframes the-div {
0% { transform: rotate(0)
translateX(0);
}
50% { transform: rotate(0)
translateX(-50%); /* move to left */
}
100% { transform: rotate(-90deg) /* rotate 90 degree */
translateX(-50%);
}
}
/* styling/info for this demo */
.faked-body div::before {
content: '';
position: absolute;
top: -10px;
left: 0;
transform: translateX(-50%);
width: 20px;
height: 20px;
border-radius: 50%;
background-color: black;
animation: the-spot 1.5s 1s forwards;
}
.faked-body {
position: relative;
margin: 10px 60px;
width: 440px;
height: 200px;
background-color: #ccc;
font-size: 14px;
}
.faked-body::before {
content: 'The gray area represents the body so we can see how the "Lorem Ipsum" element moves';
color: #666;
}
.faked-body::after {
content: 'The black spot show where the rotation center is';
color: #222;
position: absolute;
bottom: 0; left: 0;
}
@keyframes the-spot {
0% { left: 0;
}
100% { left: 50%;
}
}
<div class="faked-body">
<div>Lorem Ipsum</div>
</div>